/**
 * 微信小程序网络请求封装
 * 
 * 提供统一的网络请求接口，自动处理：
 * - Token认证
 * - 错误提示
 * - 响应数据解析
 */

const BASE_URL = 'http://localhost:8080'

interface RequestOptions {
  url: string
  method?: 'GET' | 'POST' | 'PUT' | 'DELETE'
  data?: any
  header?: any
}

/**
 * 统一的网络请求方法
 * 
 * @param options 请求配置项
 * @param options.url 请求路径（相对于BASE_URL）
 * @param options.method 请求方法，默认GET
 * @param options.data 请求数据
 * @param options.header 自定义请求头
 * @returns Promise<T> 返回解析后的数据
 */
export const request = <T = any>(options: RequestOptions): Promise<T> => {
  return new Promise((resolve, reject) => {
    // 从存储中获取token
    const token = uni.getStorageSync('token')
    
    uni.request({
      url: BASE_URL + options.url,
      method: options.method || 'GET',
      data: options.data,
      header: {
        'Content-Type': 'application/json',
        'Authorization': token ? `Bearer ${token}` : '',
        ...options.header
      },
      success: (res: any) => {
        if (res.statusCode === 200) {
          if (res.data.success) {
            resolve(res.data.data)
          } else {
            uni.showToast({
              title: res.data.message || '请求失败',
              icon: 'none'
            })
            reject(res.data)
          }
        } else if (res.statusCode === 401) {
          // 未授权，跳转到登录页
          uni.reLaunch({
            url: '/pages/login/login'
          })
          reject(new Error('未授权'))
        } else {
          uni.showToast({
            title: '网络错误',
            icon: 'none'
          })
          reject(new Error('网络错误'))
        }
      },
      fail: (error) => {
        uni.showToast({
          title: '网络连接失败',
          icon: 'none'
        })
        reject(error)
      }
    })
  })
}

export default request
